#ifndef DYN_FUNCTOR_MAPS1D_H
#define DYN_FUNCTOR_MAPS1D_H

#include "dyn_functor.h"

/*! \brief Abstract class that defines some basic
 * properties of unidimensional dynamical
 * maps.
 *
 * Because of the varying number of parameters,
 * none are defined. We define some basic methods
 * such as iteration and jacobian.
 */

class Maps1D : public Functor
{
public:
    /*! Because of the varying number of parameters,
     * none are defined in the abstract class constructor.
     */
    Maps1D(const int p ){setPeriod(p);}

    /*! @name Basic Map Operations
     * These methods are the basic values we want to have
     * access to, given a map. It computes the _p_th iterate
     * of the map, and the jacobian of the _p_th iterate
     * at a point.
     */
    //@{
    virtual double iterate(const double x, const int p)=0;
    virtual double jacobian(const double x, const int p)=0;
    //@}

    /*! @name Accessor functions.
     * In this abstact class, we define only the
     * accessor functions for period.
     */
    //@{
    virtual int getPeriod(){return period;}

    virtual void setPeriod(const int p){period = p;}
    //@}

protected:
    /*! The default iterate we want to study. */
    int period;

};

#endif // DYN_FUNCTOR_MAPS1D_H
